var fs = require('fs');

var path = require('path');

var router = require('koa-router')();

//寻找指定路径下的路由文件
function searchControllers(defaultDir){
    //读取控制器目录下的所有文件
    var files = fs.readdirSync(defaultDir);
    //筛选真实的路径文件
    var resultFiles = files.filter((fileName)=>{
        return fileName.endsWith('js') && fileName !=='index.js';
    });

    return resultFiles;
}
//路由数组下的所有定义的路由
function registerForEachFile(files,currentPath){
    //遍历每个文件
    files.forEach(element => {
        let temPath = path.join(currentPath,element);

        let routerObj = require(temPath);

        for(let r in routerObj){
            let arrValue = routerObj[r];//获取路由类型

            let type = routerObj[r][0];//获取路由请求后调用的函数

            if(type === 'get'){
                //数组中有没有包含auth,没有处理；有的话，auth传入作为第二参数
                if(arrValue.length===2){
                    let fn = arrValue[1];

                    router.get(r,fn);
                }else{
                    let auth = arrValue[1];
                    let fn = arrValue[2];
                    router.get(r,auth,fn);
                }
            }else{
                if(arrValue.length===2){
                    let fn = arrValue[1];
                    router.post(r,fn);
                }else{
                    //数组中有没有包含auth,没有处理；有的话，auth传入作为第二参数
                    let auth = arrValue[1];
                    let fn = arrValue[2];
                    router.post(r,auth,fn)
                }
            }
        }
    })
}

module.exports = function(dir){
    let defaultDir = dir || '/controller';

    let root =path.resolve('.');//当前绝对路径

    let resultControllerPath = path.join(root,defaultDir);//控制器的绝对路径

    let files = searchControllers(resultControllerPath);//控制器下的路由文件

    registerForEachFile(files,resultControllerPath);//注册定义的路由

    return router.routes();//返回待在app执行的注册函数


}